
angular.module('smartOlwApp').controller('institucionesCtrl', function($scope,ngDialog,smartOlwServices){
      
	//Si lo quiere manejar asi... entonces no seria necesario el #messageBox...
	$scope.titulo_mensajes 			= "Información!";
	$scope.descripcion_mensajes  	= "En esta vista puede administrar el maestro de departamentos";
    
	var divMessages  				= document.querySelector('#messageBox');
	divMessages.className 		 	= "alert alert-info alert-dismissable";
	$scope.instituciones			= [];

	$scope.paises				 	= [];
	$scope.departamentos		 	= [];
	$scope.ciudades				 	= [];
	$scope.nucleos 				 	= []; 
	$scope.instituciones		 	= [];
	$scope.zonas					= [];
	$scope.sectores					= [];
	$scope.ubicaciones				= [];
	$scope.calendarios				= [];

	$scope.showModal 				= function() {
		var dialog 	 				= ngDialog.open({
			template: '<div>'+
				      '   <p>En esta vista, puede crear nuevos departamentos, teniendo en cuenta los siguientes aspectos:</p>' +
					  '   <p>' + 
					  '     <ul style="list-style-type:circle;margin-left:10px;">'  +
					  '        <li>Los campos con signo *, son obligatorios, se deben diligenciar.</li>' +
					  '     </ul>' +
					  '   </p>' + 
					  '</div>'+
				      '<div class="ngdialog-buttons">'+
				      '<button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="closeThisDialog(1)">Cerrar</button>' +
				      '</div>',
		    className: 'ngdialog-theme-default',
			plain: true
		});
		dialog.closePromise.then(function (data) {
			console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
		});
	};
	
	$scope.filterValue 	= function($event){
        if(isNaN(String.fromCharCode($event.keyCode))){
            $event.preventDefault();
        }
	};
	
	$scope.consultar 				= function(institucion){

	};

	$scope.grabar 					= function(institucion){

	};

	$scope.eliminar 				= function(institucion){
		
	};
	
	$scope.seleccionar 				= function(institucion){
		
	};
	
	$scope.limpiar = function(departamento){
		$scope.instituciones 		= [];
	};
	
	/*
	 * Vamos a crear un metodo que nos cargue la información del pais... 
	 * Para eso requerimos los servicios de pais...
	 * */
	$scope.cargarListaMaestros	 			= function() {
		var argumentos 			 			= arguments;
		var metodo				 			= argumentos[1];
		try{
			var exito 			 			= function(respuesta) {
				try{
					var mensaje				= (argumentos.length > 3)?argumentos[2]:"Se realizó la consulta con exito";
					var objeto				= respuesta.data;
					var lista				= angular.fromJson(objeto);
					var tipo				= (lista.length > 0)?"success":"success";
					metodo(lista);
				}catch(e){
					alert(e.message);
				}
			};

			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
		    
			var tipo						= argumentos[0];
			var maestro						= {
				maestrodto  : { scmaestro : tipo }
			};
			smartOlwServices.sendPost(
				angular.toJson(maestro),
				hostSmart+context+endPointMaestro+methodFiltrardatosmaestroxmaestro,exito,error
			);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	$scope.buscarPais 			= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.paises,
				function(valor, item) {
					return (valor == item.scpais);
				});
	};
	
	$scope.buscarDepartamento 	= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.departamentos,
			function(valor, item) {
				return (valor == item.scdepartamento);
			});
	};
	
	$scope.buscarCiudad 		= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.ciudades,
				function(valor, item) {
					return (valor == item.scciudad);
				});
	};
	
	$scope.buscarNucleo  		= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.nucleos,
				function(valor, item) {
					return (valor == item.scnucleoeducativo);
				});
	};
	
	$scope.buscarElemento		= function(id,lista) {
		var posicion 			= $scope.buscarItem(id, lista,
			function(valor, item) {
				return (valor == item.scdatmestro);
			});
		return ((lista != null && lista.length > 0 && posicion != -1)?lista[posicion]:null);
	};
	
	$scope.buscarItem		  	= function() {
		var valor				= arguments[0];
		var lista				= arguments[1];
		var comparator			= arguments[2];
		var posicion			= -1;
		
		if(lista != null && lista.length > 0) {
			for(var index= 0; index < lista.length; index++) {
				if(comparator(valor, lista[index])) {
					posicion 	= index;
					break;
				}
			}
		}
		return posicion;
	};
	
	$scope.cargarPaises 					= function() {
		try{
			var exito 						= function(respuesta){
				try{
					var paises 				= angular.fromJson(respuesta.data);
					$scope.paises.push({dspais : 'Seleccionar' , copais : null});
					$.each(paises, function( index , pais ) {
						$scope.paises.push(pais);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de paises";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			smartOlwServices.sendGet(hostSmart+context+endPointPais+methodGetAllPais,exito,error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes 	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarDepartamentos 				= function() {
		var pais							= $scope.pais;
		var departamento 					= {scpais : {scpais : pais}};
		try{
			var exito 						= function(respuesta){
				try{
					$scope.departamentos 	= [];
					var departamentos 		= angular.fromJson(respuesta.data);
					$scope.departamentos.push({dsdepartamento : 'Seleccionar' , scdepartamento : null});
					$.each(departamentos, function( index , departamento ) {
						$scope.departamentos.push(departamento);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de departamentos";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			smartOlwServices.sendPost(
				angular.toJson(departamento),
				hostSmart+context+endPointDepartamento+methodGetDepartamento,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarCiudades 					= function() {
		var indepart	  					= $scope.buscarDepartamento($scope.dsdepartamento);
		var cdepart		  					= $scope.departamentos[indepart];
		var ciudadDTO  	  					= {departamentodto : cdepart};
		try{
			var exito 	  					= function(respuesta){
				try{
					$scope.ciudades 		= [];
					var ciudades 			= angular.fromJson(respuesta.data);
					$scope.ciudades.push({dsciudad : 'Seleccionar' , scciudad : null});
					$.each(ciudades, function( index , ciudad ) {
						$scope.ciudades.push(ciudad);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de ciudades";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			
			smartOlwServices.sendPost(
				angular.toJson(ciudadDTO),
				hostSmart+context+endPointCiudad+methodGetCiudad,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarNucleos					= function() {
		var nucleo							= {ciudaddto : $scope.scciudad};
		try {
			var exito 						= function(respuesta) {
			   var lista					= angular.fromJson(respuesta.data);
			    $scope.nucleos 				= [];
			    $scope.nucleos.push({dsnucleoeducativo : 'Seleccionar' , scnucleoeducativo : null});
			    
				$.each(lista, function(index ,nucleo ) {
					$scope.nucleos.push(nucleo);
			    });
			};
			
			var error 						= function(respuesta) {
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar nucleos";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			nucleo							= (nucleo == null)?{}:nucleo;
			var ciudaddto					= (nucleo != null)?nucleo.ciudaddto:null;
			var vciudaddto					= ciudaddto;
			if(ciudaddto != null) {
			   ciudaddto					= $scope.buscarCiudad(ciudaddto);
			   nucleo.ciudaddto 			= $scope.ciudades[ciudaddto];
			}
			
			smartOlwServices.sendPost(
				angular.toJson(nucleo),
				hostSmart+context+endPointNucleoEducativo+methodFiltrarnucleoseducativos,exito,error
			);
		}
		catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar nucleos";
			divMessages.className 			= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.cargarPaises();
	
});